/**
 *
 */
package com.ynet.middleground.riskmanage.service;

import java.util.List;

import javax.validation.Valid;

import com.ynet.core.common.ServiceResult;
import com.ynet.middleground.riskmanage.bean.newrizhaogang.NewRzgControlCargoAsynReq;
import com.ynet.middleground.riskmanage.bean.newrizhaogang.NewRzgControlCargoQueryReq;
import com.ynet.middleground.riskmanage.bean.newrizhaogang.NewRzgControlCargoReq;
import com.ynet.middleground.riskmanage.bean.newrizhaogang.NewRzgRegisterCustomerReq;
import com.ynet.middleground.riskmanage.bean.rizhaogang.*;
import com.ynet.middleground.riskmanage.bean.ytg.YtgControlCargoQueryReq;
import com.ynet.middleground.riskmanage.bean.ytg.YtgQueryTransferResultReq;
import com.ynet.middleground.riskmanage.dto.qdg.OneGoodsInfoDTO;
import com.ynet.middleground.riskmanage.dto.rizhaogang.*;
import com.ynet.middleground.riskmanage.dto.ytg.YtgTransferResultDTO;

/**
 * @ClassName NewRiZhaoGangService
 * @Description 对接新日照港服务
 * @Author songyf
 * @Date 2022/05/12 15:53
 * @Version 1.0
 */
public interface NewRiZhaoGangService {

    /**
     * 全量货物查询
     * 
     * @param req
     * @return
     */
    ServiceResult<List<RzgNewGoodsInfoDTO>> queryAllGoods(@Valid RzgAllGoodsInfoQueryReq req);

    /**
     * 非全量货物查询
     * 
     * @param req
     * @return
     */
    ServiceResult<List<RzgNewGoodsInfoDTO>> queryPartsGoods(@Valid RzgPartGoodsInfoQueryReq req);

    /**
     * 单货键货物查询
     * 
     * @param req
     * @return
     */
    ServiceResult<List<OneGoodsInfoDTO>> queryOneGoods(@Valid RzgOneGoodsInfoQueryReq req);

    /**
     * 电子仓单转让指令接收
     *
     * @param req
     * @return
     */
    ServiceResult<RzgTransferResultDTO> dealTransferCommand(@Valid RzgTransferCommandReq req);

    /**
     * 接收电子仓单转让指令处理结果
     *
     * @param req
     * @return
     */
    ServiceResult<Object> receiveTransferResult(@Valid RzgReceiveTransferResultReq req);

    ServiceResult<Object> registerCustomer(@Valid NewRzgRegisterCustomerReq req);

    ServiceResult<NewRzgCargoControlResultDTO> controlCargo(@Valid NewRzgControlCargoReq req);

    ServiceResult<NewRzgCargoControlQueryResultDTO> controlCargoQuery(@Valid NewRzgControlCargoQueryReq req);

    ServiceResult<Object> controlCargoAsyn(@Valid NewRzgControlCargoAsynReq req);

    /**
     * 海关放行信息查询
     * 
     * @author songyf
     * @param req 查询海关放行信息请求信息
     * @return 海关放行信息传输对象
     */
    ServiceResult<List<RzgCustomsReleaseDTO>> getRzgCustomsRelease(@Valid RzgCustomsReleaseQueryReq req);

    /**
     * 转让指令结果查询
     *
     * @param req
     * @return
     */
    ServiceResult<List<YtgCargoControlQueryResultDTO>> controlCargoQueryYtg(@Valid YtgControlCargoQueryReq req);
    ServiceResult<List<YtgTransferResultDTO>> queryTransferResult(@Valid YtgQueryTransferResultReq req);
}
